package com.leetcode.linkedlist;

import java.util.ArrayList;

/**
 * 206. 反转链表
 * 给你单链表的头节点 head ，请你反转链表，并返回反转后的链表。
 * 示例 1：
 * 输入：head = [1,2,3,4,5]
 * 输出：[5,4,3,2,1]
 * 示例 2：
 * 输入：head = [1,2]
 * 输出：[2,1]
 * 示例 3：
 * 输入：head = []
 * 输出：[]
 * 提示：
 * 链表中节点的数目范围是 [0, 5000]
 * -5000 <= Node.val <= 5000
 *
 * @author ymy
 * @date 2021年12月08日 15:12
 */
class Code206 {
    public static void main(String[] args) {
        Code206 code = new Code206();
        ListNode ndoe1 = new ListNode(1);
        ListNode ndoe2 = new ListNode(2);
        ListNode ndoe3 = new ListNode(3);
        ListNode ndoe4 = new ListNode(4);
        ListNode ndoe5 = new ListNode(5);
        ndoe1.next = ndoe2;
        ndoe2.next = ndoe3;
        ndoe3.next = ndoe4;
        ndoe4.next = ndoe5;
        ListNode kd = ndoe1;
        while (kd != null){
            System.out.print(kd.val + "->");
            kd = kd.next;
        }
        System.out.println();
        ListNode listNode = code.reverseList(ndoe1);
        while (listNode != null){
            System.out.print(listNode.val + "->");
            listNode = listNode.next;
        }
    }
    ListNode hd = null;
    ListNode pd = null;
    public ListNode reverseList(ListNode head) {
        way(head);
        return hd;
    }
    public ListNode way(ListNode node) {
        if(node == null){
            return node;
        }
        ListNode tem = way (node.next);
        node.next = null;
        if(tem == null){
            hd = node;
            pd = hd;
        }else {
            pd.next = node;
            pd = node;
        }
        return node;
    }

    static class ListNode {
        int val;
        ListNode next;
        ListNode() {
        }
        ListNode(int val) {
            this.val = val;
        }
        ListNode(int val, ListNode next) {
            this.val = val;
            this.next = next;
        }
    }
}
